package com.sds.service;

/**
 * @Author: sds
 *
 * @Description: 原子性
 */
public interface AtomicityService {

    /**
     * 1、synchronized关键字
     * 通过synchronized关键字来保证原子性,即同一时刻只有一个线程能够执行某个方法或某个代码块
     */
    void synchronizedMethod();

    /**
     * 2、CAS
     * 如果内存位置的当前值与预期原值不相等，会放弃本次操作，并在一个循环中不断重试，直到成功为止。即自旋
     */
    void casMethod();

    /**
     * 3、Lock锁
     * Lock锁是基于volatile实现的。Lock锁内部再进行加锁和释放锁时，会对一个由volatile修饰的state属性进行加减操作
     */
    void lockMethod();

    /**
     * 4、ThreadLocal
     * ThreadLocal是一个线程内部的数据存储类，可以在不同的线程中存储不同的数据
     */
    void threadLocalMethod();
}